// // Copyright (c) 2009 All Right Reserved // // Stephen Toub // stoub@microsoft.com // 2009-01-01 // Contains ... using System; using System.Globalization; using System.IO; using System.Text; using LargoCommon.Abstract; namespace LargoCommon.Midi { /// A sequence number meta event message. [Serializable] public sealed class MetaSequenceNumber : MetaEvent { #region Fields /// The meta id for this event. private const byte EventMetaId = 0x0; /// The sequence number for the event. private int number; #endregion #region Constructors /// Initializes a new instance of the MetaSequenceNumber class. /// The amount of time before this event. /// The sequence number for the event. public MetaSequenceNumber(long deltaTime, int number) : base(deltaTime, EventMetaId) { this.Number = number; } #endregion #region Properties /// Gets or sets the sequence number for the event. /// General musical property. private int Number { get => this.number; set { if (value < 0 || value > 0xFFFF) { throw new ArgumentOutOfRangeException(nameof(value), value, "The number must be in the range from 0x0 to 0xFFFF."); } this.number = value; } } #endregion #region To String /// Generate a string representation of the event. /// A string representation of the event. public override string ToString() { var sb = new StringBuilder(); sb.Append(base.ToString()); sb.Append("\t"); sb.Append(this.Number.ToString(CultureInfo.CurrentCulture.NumberFormat)); return sb.ToString(); } #endregion #region Methods /// Write the event to the output stream. /// The stream to which the event should be written. public override void Write(Stream outputStream) { if (outputStream == null) { return; } //// Write out the base event information base.Write(outputStream); // Special meta event marker and the id of the event outputStream.WriteByte(0x02); outputStream.WriteByte((byte)((this.number & DefaultValue.MaskFirstByte) >> 8)); outputStream.WriteByte((byte)(this.number & 0xFF)); } #endregion } }